package com.example.leetcode.trainingcamp.week5.Thursday.expand;

import java.util.ArrayList;
import java.util.List;

/**
 * 给定一个排序好的数组 arr ，两个整数 k 和 x ，从数组中找到最靠近 x（两数之差最小）的 k 个数。返回的结果必须要是按升序排好的。
 *
 * <p>整数 a 比整数 b 更接近 x 需要满足：
 *
 * <p>|a - x| < |b - x| 或者 |a - x| == |b - x| 且 a < b
 *
 * <p>示例 1：
 *
 * <p>输入：arr = [1,2,3,4,5], k = 4, x = 3 输出：[1,2,3,4]
 *
 * <p>来源：力扣（LeetCode） 链接：https://leetcode-cn.com/problems/find-k-closest-elements
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class Test658 {

    public List<Integer> findClosestElements(int[] arr, int k, int x) {
        int high = arr.length - k;
        int low = 0;
        while (low < high){
            int mid = low + (high - low) / 2;
            if (x - arr[mid] > arr[mid + k] -x){
                low = mid + 1;
            }else {
                high = mid;
            }
        }
        List<Integer> result = new ArrayList<>();
        for (int i =0 ;i<k;i++){
            result.add(arr[low + i]);
        }
        return result;
    }

}
